package com.rabbitmq.ps;

import com.rabbitmq.RabbitMqConnectionUtil;
import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class Consumer2 {
    public static void main(String[] args) throws IOException, TimeoutException {
        //创建连接
        Connection connection = RabbitMqConnectionUtil.getConnection();
        //创建频道
        Channel channel = connection.createChannel();
        //创建交换机
        channel.exchangeDeclare(Producer.FANOUT_EXCHANGE, BuiltinExchangeType.FANOUT);
        /**
         * 声明(创建)的队列
         * 参数1 队列名称
         * 参数2 是否定义持久化队列
         * 参数3 是否独占本次连接
         * 参数4 是否在不适用的时候自动删除队列
         * 参数5 队列其他参数
         */
        channel.queueDeclare(Producer.FANOUT_QUEUE_2, true, false, false, null);
        //队列绑定交换机
        channel.queueBind(Producer.FANOUT_QUEUE_2, Producer.FANOUT_EXCHANGE, "");
        //监听消息
        DefaultConsumer consumer = new DefaultConsumer(channel) {
            @Override
            /**
             * consumerTag 消息者标签，在channel，basicConsume时候可以指定
             * envelope 消息包的内容，可从中获取消息ID，消息routingkey，交换机，消息和重传标志（收到消息失败）
             * properties 属性信息
             * body 消息
             */
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                super.handleDelivery(consumerTag, envelope, properties, body);
                //路由key
                System.out.println("路由key为：" + envelope.getRoutingKey());
                //交换机
                System.out.println("交换机为：" + envelope.getExchange());
                //消息ID
                System.out.println("消息的ID：" + envelope.getDeliveryTag());
                //收到的消息
                System.out.println("消费者2接收到的消息为：" + new String(body, "UTF-8"));
            }
        };
        channel.basicConsume(Producer.FANOUT_QUEUE_2, true, consumer);
        //不关闭资源，处于一直监听的状态
    }
}
